package com.ylyq.ylxx.model.request;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.validation.constraints.NotNull;

/**
 * @ClassName GetPlanInfoRequest
 * @Description TODO
 * @Author xiaweichao
 * @Date 2020/6/29 10:52
 * @Version 1.0
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@ApiModel(value = "获取广告组信息的请求参数")
public class GetPlanInfoRequest {
    @ApiModelProperty(value = "广告主ID",required = true)
    @NotNull(message = "广告主ID不能为空")
    private Long advertiser_id;

    @ApiModelProperty(value = "页数")
    private Integer page;

    @ApiModelProperty(value = "页面大小")
    private Integer page_size;

    @ApiModelProperty(value = "查询字段集合, 如果指定, 则返回结果数组中, 每个元素是包含所查询字段的字典允许值: \"id\", \"name\", \"budget\", \"budget_mode\", \"status\", \"opt_status\",\"open_url\", \"modify_time\", \"start_time\", \"end_time\", \"bid\",\"advertiser_id\", \"pricing\", \"flow_control_mode\", \"download_url\", quick_app_url, \"inventory_type\", \"schedule_type\", \"app_type\", \"cpa_bid\",\"cpa_skip_first_phrase\", \"audience\", \"external_url\", \"package\",\"campaign_id\", \"ad_modify_time\", \"ad_create_time\",\"audit_reject_reason\", \"retargeting_type\", \"retargeting_tags\",\"convert_id\", \"interest_tags\", \"hide_if_converted\",\"external_actions\", \"device_type\",\"auto_extend_enabled\", \"auto_extend_targets\", \"dpa_lbs\", \"dpa_city\", \"dpa_province\", \"dpa_recommend_type\", \"roi_goal\"")
    private String[] fields;

    @ApiModelProperty(value = "过滤条件，若此字段不传，或传空则视为无限制条件")
    private FilteringGetPlanInfoRequest filtering;
    @ApiModelProperty(value = "统计数据过滤条件，用于在获取广告组信息及统计数据，如果不是获取统计数据，就不用传")
    private ReportFiltering reportFiltering;

    @NoArgsConstructor
    @Data
    @ApiModel(value = "获取广告计划信息含数据报告的请求参数-统计数据过滤")
    public static class ReportFiltering {
        @ApiModelProperty(value = "起始日期,格式YYYY-MM-DD,只支持查询2016-10-26及以后的日期",required = true)
        @NotNull(message = "起始日期不能为空")
        private String start_date;
        @ApiModelProperty(value = "结束日期,格式YYYY-MM-DD,只支持查询2016-10-26及以后的日期\n" +
                "- 对于搜索词报表，只支持查看最近 30 天的数据;\n" +
                "- 对于关键词报表，只支持查看 2019-05-19 之后的数据",required = true)
        @NotNull(message = "结束日期不能为空")
        private String end_date;

    }
    @NoArgsConstructor
    @Data
    public static class FilteringGetPlanInfoRequest {

        /**
         * advertiser_id : 12312321
         * advertiser_name : test_developer
         * advertiser_role : 1
         * is_valid : true
         */
        @ApiModelProperty(value = "【过滤条件】广告计划id过滤，数组")
        private Long[] ids;
        @ApiModelProperty(value = "【过滤条件】按广告计划name过滤")
        private String ad_name;
        @ApiModelProperty(value = "【过滤条件】按出价方式过滤.PRICING_CPC\tCPC ，出价范围（单位元）:0.2-100，日预算范围（单位元）：大于100，总预算范围：大于最低日预算乘投放天数\tPRICING_CPM\tCPM ，出价范围（单位元）: 4-100，日预算范围（单位元）：大于100，总预算范围：大于最低日预算乘投放天数\tPRICING_OCPC\tOCPC（已下线，仅投放范围为穿山甲可用）\tPRICING_OCPM\tOCPM，出价范围（单位元）:0.1-10000，日预算范围（单位元）：大于300，总预算范围：大于最低日预算乘投放天数\tPRICING_CPV\tCPV ，出价范围（单位元）:0.07-100，日预算范围（单位元）：大于100，总预算范围：大于最低日预算乘投放天数（CPV广告只支持投放到头条系广告位，不支持投放到视频信息流如西瓜、火山、抖音）\tPRICING_CPA\tCPA")
        private String[] pricing_list;
        @ApiModelProperty(value = "【过滤条件】按计划状态过滤，默认为返回“所有不包含已删除”，如果要返回所有包含已删除有对应枚举表示.AD_STATUS_DELIVERY_OK\t投放中\tAD_STATUS_DISABLE\t计划暂停\tAD_STATUS_AUDIT\t新建审核中\tAD_STATUS_REAUDIT\t修改审核中\tAD_STATUS_DONE\t已完成（投放达到结束时间）\tAD_STATUS_CREATE\t计划新建\tAD_STATUS_AUDIT_DENY\t审核不通过\tAD_STATUS_BALANCE_EXCEED\t账户余额不足\tAD_STATUS_BUDGET_EXCEED\t超出预算\tAD_STATUS_NOT_START\t未到达投放时间\tAD_STATUS_NO_SCHEDULE\t不在投放时段\tAD_STATUS_CAMPAIGN_DISABLE\t已被广告组暂停\tAD_STATUS_CAMPAIGN_EXCEED\t广告组超出预算\tAD_STATUS_DELETE\t已删除\tAD_STATUS_FROZEN\t已冻结\tAD_STATUS_ALL\t所有包含已删除\tAD_STATUS_NOT_DELETE\t所有不包含已删除（状态过滤默认值）\tAD_STATUS_ADVERTISER_BUDGET_EXCEED\t超出账户日预算")
        private String status;
        @ApiModelProperty(value = "按广告组id过滤")
        private Long campaign_id;
        @ApiModelProperty(value = "【过滤条件】广告计划创建时间，格式\"yyyy-mm-dd\"，表示过滤出当天创建的广告计划")
        private String ad_create_time;
        @ApiModelProperty(value = "【过滤条件】广告计划更新时间，格式\"yyyy-mm-dd\"，表示过滤出当天更新的广告计划")
        private String ad_modify_time;
    }

}
